package com.jinsi.service.ylt.iml;

import com.jinsi.mapper.ylt.IndexMapper;

import com.jinsi.pojo.SyMenuY;
import com.jinsi.service.ylt.IndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName IndexService
 * @Content 首页导航栏Service实现类
 * @Author 姚龙腾
 * @Date 2022/10/12 11:53
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class IndexServiceImpl implements IndexService {

    @Autowired
    private IndexMapper indexMapper;

    /**
     * 获取全部菜单栏
     * @param name
     * @return List<SyMenuY>
     */
    @Override
    @Transactional(readOnly = true)
    public List<SyMenuY> getParentMeun(String name) {
        //获取所有的菜单(包括子菜单和父级菜单)
        List<SyMenuY> list = indexMapper.getParentMeun(name);
        //创建一个集合用于保存所有的主菜单
        List<SyMenuY> rootMeun = new ArrayList<>();
        //遍历所有菜单集合,如果是主菜单的话直接放入rootMeun集合
        for (SyMenuY i : list){
            //判断为0是因为我的主菜单标识是0
            if (i.getParentId() == 0){
                rootMeun.add(i);
            }
        }
        //这个是遍历所有主菜单,分别获取所有主菜单的所有子菜单
        for (SyMenuY i : rootMeun){
            //获取所有子菜单 递归
            List<SyMenuY> childrenList = getchildrenMeun(i.getId(),list);
            //这个是实体类中的子菜单集合
            i.setChild(childrenList);
        }
        return rootMeun;

    }


    /**
     * 保存所有子级
     * @param id
     * @param allMeun
     * @return List<SyMenuY>
     */
    @Override
    @Transactional(readOnly = true)
    public List<SyMenuY> getchildrenMeun(int id, List<SyMenuY> allMeun) {
        //用于保存子菜单
        List<SyMenuY> childrenList = new ArrayList<>();
        for (SyMenuY i: allMeun){
            //判断当前的菜单标识是否等于主菜单的id
            if(i.getParentId() == id){
                //如果是的话 就放入主菜单对象的子菜单集合
                childrenList.add(i);
            }
        }

        //这里就是递归了，遍历所有的子菜单
        for (SyMenuY i:childrenList){
            i.setChild(getchildrenMeun(i.getId(),allMeun));
        }

        //如果子菜单为空的话，那就说明某菜单下没有子菜单了，直接返回空,子菜单为空的话就不会继续迭代了
        if(childrenList != null && childrenList.size() == 0){
            return new ArrayList<>();
        }
        return  childrenList;
    }
}
